home *** CD-ROM | disk | FTP | other *** search
- //-----------------------------------------------------------------------------
- // File: CreateDevice.cpp
- //
- // Desc: This is the first tutorial for using Direct3D. In this tutorial, all
- // we are doing is creating a Direct3D device and using it to clear the
- // window.
- //
- // Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
- //-----------------------------------------------------------------------------
- #include <d3d8.h>
-
-
-
-
- //-----------------------------------------------------------------------------
- // Global variables
- //-----------------------------------------------------------------------------
- LPDIRECT3D8 g_pD3D = NULL; // Used to create the D3DDevice
- LPDIRECT3DDEVICE8 g_pd3dDevice = NULL; // Our rendering device
-
-
-
-
- //-----------------------------------------------------------------------------
- // Name: InitD3D()
- // Desc: Initializes Direct3D
- //-----------------------------------------------------------------------------
- HRESULT InitD3D( HWND hWnd )
- {
- // Create the D3D object, which is needed to create the D3DDevice.
- if( NULL == ( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) )
- return E_FAIL;
-
- // Get the current desktop display mode
- D3DDISPLAYMODE d3ddm;
- if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )
- return E_FAIL;
-
- // Set up the structure used to create the D3DDevice. Most parameters are
- // zeroed out. We set Windowed to TRUE, since we want to do D3D in a
- // window, and then set the SwapEffect to "discard", which is the most
- // efficient method of presenting the back buffer to the display. And
- // we request a back buffer format that matches the current desktop display
- // format.
- D3DPRESENT_PARAMETERS d3dpp;
- ZeroMemory( &d3dpp, sizeof(d3dpp) );
- d3dpp.Windowed = TRUE;
- d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
- d3dpp.BackBufferFormat = d3ddm.Format;
-
- // Create the Direct3D device. Here we are using the default adapter (most
- // systems only have one, unless they have multiple graphics hardware cards
- // installed) and requesting the HAL (which is saying we want the hardware
- // device rather than a software one). Software vertex processing is
- // specified since we know it will work on all cards. On cards that support
- // hardware vertex processing, though, we would see a big performance gain
- // by specifying hardware vertex processing.
- if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
- D3DCREATE_SOFTWARE_VERTEXPROCESSING,
- &d3dpp, &g_pd3dDevice ) ) )
- {
- return E_FAIL;
- }
-
- // Device state would normally be set here
-
- return S_OK;
- }
-
-
-
-
- //-----------------------------------------------------------------------------
- // Name: Cleanup()
- // Desc: Releases all previously initialized objects
- //-----------------------------------------------------------------------------
- VOID Cleanup()
- {
- if( g_pd3dDevice != NULL)
- g_pd3dDevice->Release();
-
- if( g_pD3D != NULL)
- g_pD3D->Release();
- }
-
-
-
-
- //-----------------------------------------------------------------------------
- // Name: Render()
- // Desc: Draws the scene
- //-----------------------------------------------------------------------------
- VOID Render()
- {
- if( NULL == g_pd3dDevice )
- return;
-
- // Clear the backbuffer to a blue color
- g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
-
- // Begin the scene
- g_pd3dDevice->BeginScene();
-
- // Rendering of scene objects can happen here
-
- // End the scene
- g_pd3dDevice->EndScene();
-
- // Present the backbuffer contents to the display
- g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
- }
-
-
-
-
- //-----------------------------------------------------------------------------
- // Name: MsgProc()
- // Desc: The window's message handler
- //-----------------------------------------------------------------------------
- LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
- {
- switch( msg )
- {
- case WM_DESTROY:
- PostQuitMessage( 0 );
- return 0;
-
- case WM_PAINT:
- Render();
- ValidateRect( hWnd, NULL );
- return 0;
- }
-
- return DefWindowProc( hWnd, msg, wParam, lParam );
- }
-
-
-
-
- //-----------------------------------------------------------------------------
- // Name: WinMain()
- // Desc: The application's entry point
- //-----------------------------------------------------------------------------
- INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
- {
- // Register the window class
- WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
- GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
- "D3D Tutorial", NULL };
- RegisterClassEx( &wc );
-
- // Create the application's window
- HWND hWnd = CreateWindow( "D3D Tutorial", "D3D Tutorial 01: CreateDevice",
- WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
- GetDesktopWindow(), NULL, wc.hInstance, NULL );
-
- // Initialize Direct3D
- if( SUCCEEDED( InitD3D( hWnd ) ) )
- {
- // Show the window
- ShowWindow( hWnd, SW_SHOWDEFAULT );
- UpdateWindow( hWnd );
-
- // Enter the message loop
- MSG msg;
- while( GetMessage( &msg, NULL, 0, 0 ) )
- {
- TranslateMessage( &msg );
- DispatchMessage( &msg );
- }
- }
-
- // Clean up everything and exit the app
- Cleanup();
- UnregisterClass( "D3D Tutorial", wc.hInstance );
- return 0;
- }
-
-
-
-